package com.huanf.controller;

import com.huanf.service.DegradService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalTime;

/**
 * @author: 35238
 * 功能: 服务降级
 * 时间: 2023-12-30 13:39
 */
@RestController
public class DegradController {

    //mock值为true，表示开启服务降级，并且默认你的Mock类要放在api模块下即com.huanf.service包下有DegradServiceMock类
    //mock值为全路径类名，表示开启服务降级，并且Mock类就是你写在mock值的这个类
    //@DubboReference(mock = "true")
    @DubboReference(mock = "com.huanf.mock.DegradServiceMock2") //这个com的路径不严格要求，可以是任意模块(mock值写true的话，默认就是api模块)，反正存在这个com路径即可
    private DegradService degradService;

    //由于要频繁请求(1秒每次的请求不可能触发降级)才能触发降级(或者直接停止provider模块的运行，这是最有效的触发降级)，所以我们这里用线程去测试
    @GetMapping("/degrad") //浏览器访问 http://localhost:8191/degrad
    public void degrad() {

        new Thread(()->{
            while (true) {
                try {
                    Thread.sleep(1000);
                    System.out.println(LocalTime.now() + "。线程开始。 " + degradService.myInfo("张三"));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    Thread.currentThread().interrupt();
                }
            }
        }).start();
    }
}
